﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Npgsql;
using System.Data;

namespace Aeroporto.bd
{
    class Conexao
    {
        public static NpgsqlConnection conexao;
        public static NpgsqlCommand sql;
        public static NpgsqlDataReader ler_dados;
        public static string parametros;
        public static bool conectado = false;

        public static NpgsqlConnection getConexao()
        {
            if (conectado == false)
            {
                return conectar();
            }
            return conexao;
        }

        public static NpgsqlConnection conectar()
        {            
            //parametros = "Server=localhost;Port=5432;User Id=postgres;Password=123;Database=aeroporto";
            parametros = "Server=galileo.facom.ufu.br;Port=5432;User Id=bsi_g06;Password=pass.bsi_g06;Database=banco_bsi_g06;Searchpath=aeroporto_v4";//infelizmente não temos permissão para criar um grupo de usuário no servidor postgres da UFU
            try
            {                
                conexao = new Npgsql.NpgsqlConnection(parametros);
                conexao.Open();                
                Console.WriteLine("CONECTOU!");
                conectado = true;
            }
            catch(NpgsqlException e)
            {
                Console.Write("ERRO AO CONECTAR : " + e);                
            }
            return conexao;
        }

        public static void desconectar()
        {
            try
            {
                conexao.Close();                
                Console.WriteLine("DESCONECTOU!");
                conectado = false;
            }
            catch (NpgsqlException e)
            {
                Console.WriteLine("ERRO AO DESCONECTAR! :" + e);
            }
        }

     
        public static NpgsqlDataReader consulta(string consulta){                        
            try
            {
                Arquivo.escrever(consulta);
                sql = new NpgsqlCommand(consulta, getConexao());
                ler_dados = sql.ExecuteReader();
            }
            catch(NpgsqlException e)
            {
                Console.Write("ERRO NA CONSULTA : " + e);
            }
            return ler_dados; 
         }

        public static string consulta_2(string consulta)
        {
            try
            {
                Arquivo.escrever(consulta);
                sql = new NpgsqlCommand(consulta, getConexao());
                ler_dados = sql.ExecuteReader();
            }
            catch (NpgsqlException e)
            {
                Console.Write("ERRO NA CONSULTA : " + e);
                throw e;
            }
            finally
            {
                ler_dados.Close();
            }

            return "OK";
        }

        public static string logar(String usuario, String senha)
        {
            string sql = "";
            try
            {
                sql = "Select * from companhia where upper(sigla) ='" + usuario + "' and upper(senha) = '" + senha + "'";
                NpgsqlDataReader data = Conexao.consulta(sql);

                if (data.Read())
                {
                    data.Close();
                    return "COMPANHIA";
                }
                else
                {
                    sql = "Select * from login where upper(usuario) ='" + usuario + "' and senha = '" + senha + "'and tipo = 'AGENCIA'";
                    data = Conexao.consulta(sql);
                    if (data.Read())
                    {
                        data.Close();
                        return "AGENCIA";                        
                        //Arquivo.escrever("Usuario "+data.GetString(0)+"\n"+"Senha "+data.GetString(1)+"\n"+"Tipo "+data.GetString(2));
                        //Console.WriteLine( data["tipo"].ToString() );
                    }
                    else
                    {
                        sql = "Select * from login where upper(usuario) ='" + usuario + "' and upper(senha) = '" + senha + "'and tipo = 'GOVERNO'";
                        data = Conexao.consulta(sql);

                        if (data.Read())
                        {
                            data.Close();
                            return "GOVERNO";                            
                        }
                        else
                        {
                            Arquivo.escrever(sql);
                            return "FALHA";                     
                        }
                    }
                }
                
            }
            catch (NpgsqlException e1)
            {
                Arquivo.escrever(sql);
                Console.WriteLine("ERRO: " + e1);
                return "FALHA";
            }
        }
    }
}